Windows 10 から Windows Server(EC2) へ OpenSSH で SSH 接続してみた
Windows へ SSH したいユースケース
- SCP でファイルを転送したい
- コマンドを実行するだけなので、RDPをする必要性がない
前提となる環境
- サーバー側: Windows Server 2019(AWS環境(東京リージョン)、パブリックサブネットへ構築)
- SSM マネージドインスタンスであること
- セキュリティグループのインバウンドルールにて、クライアントのパブリック IP アドレスからの 22 番ポートの通信が許可されている。
- 便宜上、パブリック IP アドレスは 123.123.123.123、インスタンス ID は i-EXAMPLE としています。
- クライアント側: Windows 10(一般的なPC、仕事で使っています)
- AWS CLI が実行できる
- Systems Manager に関する権限が付与されている IAM ポリシーが付与された IAM ユーザー、または、IAM ロールのクレデンシャル情報が設定されている
Windows Server に OpenSSH をインストールする
Systems Manager の機能である、Run Command をフル活用し、インスタンスへログインせずに、コマンドを実行していきます。
下記コマンドにて、OpenSSH Server をインストールします。
aws ssm send-command \ --document-name "AWS-RunPowerShellScript" \ --document-version "1" \ --targets '[{"Key":"InstanceIds","Values":["i-EXAMPLE"]}]' \ --parameters '{"workingDirectory":[""],"executionTimeout":["3600"],"commands":["Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0"]}' \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" \ --region ap-northeast-1
Run Command でインストール確認コマンドを実行します。
aws ssm send-command \ --document-name "AWS-RunPowerShellScript" \ --document-version "1" \ --targets '[{"Key":"InstanceIds","Values":["i-EXAMPLE"]}]' \ --parameters '{"workingDirectory":[""],"executionTimeout":["3600"],"commands":["Get-WindowsCapability -Online | Where-Object Name -like '"'"'OpenSSH*'"'"'"]}' \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" \ --region ap-northeast-1
コンソールなどで結果を確認し、下記メッセージが出力されていれば成功しています。
Name : OpenSSH.Client~~~~0.0.1.0 State : Installed Name : OpenSSH.Server~~~~0.0.1.0 State : Installed
なお、インストール後 OpenSSH SSH Server は自動的に開始されません。
RunCommand で、Open SSH Server のサービス開始し、「スタートアップの種類」を自動起動する設定へ変更、ファイアウォールの設定を行ってください。
aws ssm send-command \ --document-name "AWS-RunPowerShellScript" \ --document-version "1" \ --targets '[{"Key":"InstanceIds","Values":["i-EXAMPLE"]}]' \ --parameters '{"workingDirectory":[""],"executionTimeout":["3600"],"commands":["# Start the sshd service","Start-Service sshd","","# OPTIONAL but recommended:","Set-Service -Name sshd -StartupType '"'"'Automatic'"'"'","","# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify","if (!(Get-NetFirewallRule -Name \"OpenSSH-Server-In-TCP\" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {"," Write-Output \"Firewall Rule '"'"'OpenSSH-Server-In-TCP'"'"' does not exist, creating it...\""," New-NetFirewallRule -Name '"'"'OpenSSH-Server-In-TCP'"'"' -DisplayName '"'"'OpenSSH Server (sshd)'"'"' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22","} else {"," Write-Output \"Firewall rule '"'"'OpenSSH-Server-In-TCP'"'"' has been created and exists.\"","}"]}' \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" --region ap-northeast-1
Windows のクライアントに OpenSSH をインストールする
クライアント PC で PowerShell を管理者権限で起動し、以下のコマンドでチェックします。
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' Name : OpenSSH.Client~~~~0.0.1.0 State : Installed Name : OpenSSH.Server~~~~0.0.1.0 State : NotPresent
すでにインストールされていれば、そのままで問題ありません。
インストールされていなければ、下記のコマンドでインストールをしてください。
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 Path : Online : True RestartNeeded : False
Windows 10 クライアントから Windows Server へ SSH 接続する
マネジメントコンソールからパスワードを取得する
RDP をする場合と同様に、マネジメントコンソールでキーペアを参照し、パスワードを取得します。
マネジメントコンソール → EC2 コンソール → インスタンス → インスタンスID → 接続 → RDP クライアント → [パスワードを取得]
SSH コマンドで接続する
いよいよ本番です。
Windows 10 クライアントから PowerShell で SSH 接続をしてみましょう。
パスワードは先ほどマネジメントコンソールから取得したパスワードを入力します。
ssh Administrator@ec2-123-123-123-123.ap-northeast-1.compute.amazonaws.com Administrator@ec2-123-123-123-123.ap-northeast-1.compute.amazonaws.com's password:
できました!
administrator@EC2AMAZ-SAMPLE C:\Users\Administrator> dir Volume in drive C has no label. Volume Serial Number is 5285-5BD9 Directory of C:\Users\Administrator 07/09/2022 08:01 AM . 07/09/2022 08:01 AM .. 11/14/2018 06:56 AM Desktop 07/09/2022 08:01 AM Documents 09/15/2018 07:19 AM Downloads 09/15/2018 07:19 AM Favorites 09/15/2018 07:19 AM Links 09/15/2018 07:19 AM Music 09/15/2018 07:19 AM Pictures 09/15/2018 07:19 AM Saved Games 09/15/2018 07:19 AM Videos 0 File(s) 0 bytes 11 Dir(s) 13,274,353,664 bytes free
scp コマンドでファイルも送ってみます。
scp ./test.txt Administrator@ec2-123-123-123-123.ap-northeast-1.compute.amazonaws.com:test.txt Administrator@ec2-123-123-123-123.ap-northeast-1.compute.amazonaws.com's password: test.txt 100% 18 1.2KB/s 00:00
SSH 接続をして確認をしてみます。
administrator@EC2AMAZ-SAMPLE C:\Users\Administrator> dir Volume in drive C has no label. Volume Serial Number is 5285-5BD9 Directory of C:\Users\Administrator 07/12/2022 06:42 AM . 07/12/2022 06:42 AM .. 11/14/2018 06:56 AM Desktop 07/09/2022 08:01 AM Documents 09/15/2018 07:19 AM Downloads 09/15/2018 07:19 AM Favorites 09/15/2018 07:19 AM Links 09/15/2018 07:19 AM Music 09/15/2018 07:19 AM Pictures 09/15/2018 07:19 AM Saved Games 07/12/2022 06:44 AM 18 test.txt 09/15/2018 07:19 AM Videos 1 File(s) 18 bytes 11 Dir(s) 13,271,130,112 bytes free
test.txt が転送されていることが確認できました。
公開鍵認証の方法
本記事ではパスワード認証での方法を紹介しましたが、公開鍵認証での方法も可能です。詳細は下記のブログをご参照ください。
Windows Server 2019 EC2インスタンスでSSHサーバーを有効にする | DevelopersIO
また、EC2Launch v2 にて SSH サーバーを自動構成する機能も追加されています。
EC2Launch v2の機能一覧 | DevelopersIO